//
//  SQLiteManager.h
//  OCDemo
//
//  Created by zhumuzhi on 2021/5/12.
//

#import <Foundation/Foundation.h>


/*
 各种符号对应类型，部分类型在新版SDK中有所变化，如long 和long long
 c char         C unsigned char
 i int          I unsigned int
 l long         L unsigned long
 s short        S unsigned short
 d double       D unsigned double
 f float        F unsigned float
 q long long    Q unsigned long long
 B BOOL
 @ 对象类型 //指针 对象类型 如NSString 是@“NSString”
 
 64位下long 和long long 都是Tq
 SQLite 默认支持五种数据类型TEXT、INTEGER、REAL、BLOB、NULL
 因为在项目中用的类型不多，故只考虑了少数类型
 */

/** SQLite五种数据类型 */
#define SQLTEXT     @"TEXT"    // 文本字符串
#define SQLINTEGER  @"INTEGER" // 整型值
#define SQLREAL     @"REAL"    // 浮点值
#define SQLBLOB     @"BLOB"    // 二进制数据（如文件）
#define SQLNULL     @"NULL"    // 空
#define PrimaryKey  @"primary key"

#define primaryId   @"pk"
#define createTime  @"created_at"
#define updateTime  @"updated_at"


NS_ASSUME_NONNULL_BEGIN

@interface SQLiteManager : NSObject

/// 单例创建方法
+ (instancetype)shareInstance;

/// 创建SQLite文件，打开数据库，并根据object类创表，如果object为空，或未传递则不创表
- (BOOL)openDB:(NSObject *)object;

/// 创建表文件，根据传入参数NSObject
- (BOOL)createTable:(NSObject *)object;

/// 执行SQL语句
- (BOOL)execSQL:(NSString *)sql;

- (NSArray *)querySQL:(NSString *)querySQL;

// 获取模型对像类表名
- (NSString *)getObjectTableName:(NSObject *)object;
// 获取模型对象全部属性
- (NSString *)getAllProperties:(NSObject *)object;

@end

NS_ASSUME_NONNULL_END
